实验室项目展示用PyQt系列(3)如何调用MATLAB中的.m脚本文件

您所在的位置:网站首页 qfiledialog选择文件夹 pyqt 实验室项目展示用PyQt系列(3)如何调用MATLAB中的.m脚本文件

实验室项目展示用PyQt系列(3)如何调用MATLAB中的.m脚本文件

2023-06-24 19:35| 来源: 网络整理| 查看: 265

本科毕设被研导要求添加可视化界面展示结果功能以填补实验室的需求,同时需要做好来自MatLab与python的接口。由于实验室大量项目工作在演示时需要使用界面,常有同门前来问询,而此工作中有大量踩坑踩雷需要注意,空口说自然不如图文来的明白完整,故写此系列博客,以避免不必要的时间浪费。

文章并非专业的界面设计教程,唯一写作目的为帮助不希望透彻理解PyQt5的人能够制作界面以回应导师/领导等人的期待,满足教学/项目等需求,为避免误导,以入职软件公司为目的请勿借鉴本博客。

上一篇:实验室项目展示用PyQt系列(2)设计基本流程、Qt Designer使用、界面中添加图片等

实验室项目展示用PyQt系列(2)设计基本流程、Qt Designer使用、界面中添加图片等_修雷达的sb的博客-CSDN博客所需图片声明完成后,就可以进入下一步。从固件栏中拖出一个QLabel固件,将其自带的文字删除,在styleSheet栏中点击添加按钮,选择“...”按钮》image,选择所需的图片文件,即可将其添加进固件中。对.qrc文件右键,选择外部工具(External Tools),再选择PYRCC5,则会将所用到的图片编译为..._rc.py文件,在刚刚生成的界面.py中,需要将生成的_rc.py文件声明出来。固件的名称,可以在右边栏的对象查看器中进行定义,建议对每个固件定义,默认名称为类名称+编号,容易混淆。https://blog.csdn.net/pyc0551/article/details/131244379由于实验室众人所使用的编程语言软件不尽相同,有时候可能会出现常用Python的同学需要借用其它同学甚至前人的MATLAB代码的情况,此时为了避免浪费时间,能够直接进行复用,可以通过MATLAB LIbrary Compiler插件进行调用。

1.库文件如何生成

由于我们期望通过PyQt调用,因此在TYPE栏中选择Python Package,而我们所需要的函数主程序被写在了ompscatterforsar.m中,因此EXPORTED FUNCTIONS中仅需要选择ompscatterforsar.m这一个文件即可。

至于其他被主程序所调用的文件,则可根据情况加入Files required for your library to run这一栏中。需要注意的是,Samples这一栏中最好加入一个自己写的演示脚本,示范具体调用该软件的方法,以本人的工作为例,其样例代码如下。

close all; clear all; clc; format long; src = ompreadmat('DEG17_COL2_SCENE1_D7.mat'); [len,wid,or_axis,oa_axis,processedsig,oX,olinel,oxy,oxx2,oyy2,oxx2_o,oyy2_o] = ompscatterforsar('DEG17_COL2_SCENE1_D7.mat',10); figure(1); imagesc(abs(src)); xlabel('方位维'),ylabel('距离维'); set(gca,'YDir','normal'); title('原始信号图像'); %figure(2); %imagesc(oa_axis,or_axis,abs(targsrc)); %set(gca,'YDir','normal'); %xlabel('方位/米'); %ylabel('距离/米'); %title('T72原始图像'); %hold on; figure(3) imagesc(oa_axis,or_axis,abs(processedsig)); set(gca,'YDir','normal'); xlabel('方位/米'); ylabel('距离/米'); title('稀疏重构信号'); hold on; figure(4); plot(oX(:,1),oX(:,2),'.'); axis([-15 15 -15 15]); hold on; plot(oxy,olinel,'y'); plot(oxx2,oyy2,'ro'); plot(oxx2_o,oyy2_o,'ro'); print(len); print(wid);

添加完成之后,就可以进行编译了,点击右上角的绿色√(Package)等待其编译完成。

2.库文件如何进行安装

跳出的输出的文件夹中有如上三个文件夹,这里我们只用for_redistribution_files_only中的文件。具体方式如下。在ananconda激活虚拟环境后,进行如下操作。

conda install matlab cd 生成的库文件所在的文件夹\for_redistribution_files_only python setup.py install

至此,MATLAB生成的库文件就已经完成了安装。

3.如何通过python进行调用

import ompscatterforsar#将生成的库调用 oss = ompscatterforsar.initialize()#初始化,将函数送入matlab runtime src = self.oss.ompreadmat(str(self.fname), nargout=1)#读取数据 [len, wid, or_axis, oa_axis, processedsig, oX, olinel, oxy, oxx2, oyy2, oxx2_o, oyy2_o] = self.oss.ompscatterforsar( str(fname), nargout=12)#执行脚本

需要注意的是,第一二行必须运行,第三四行根据具体情况,可能只有一行,也可能有很多行。但是必须注意的是,nargout参数指的是matlab runtime返回的值的数量,必须指定为正确大小,否则将会报错。

考虑到MATLAB Runtime可能会由于重复调用某些模块导致其内核爆炸,建议在开始运行前,即初始化后增加一个对环境变量的更改,如下代码。

import os os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'

需要注意的是,这一调用方法是在Python与MATLAB引擎之间进行数据传递,效率偏低,方法的最大优点在于,不用重写MATLAB中的脚本成为Python程序,而是直接生成库文件再有Python调用,节省大量的程序开发时间。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3